//Copyright (c) 2006-2007 Microsoft Corporation.  All rights reserved
using System;

namespace InvocationFramework.Common
{
    /// <summary>
    /// Informacion de la invocacion de un servicio
    /// </summary>
    /// <author>Rodolfo Finochietti 30/11/2005 14.02</author>
    public class InvocationInformation
    {
        #region Constructors

        /// <summary>
        /// Constructor por defecto
        /// </summary>
        public InvocationInformation( ) { }

        #endregion

        #region Properties

        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private string _adapterId;

        /// <summary>
        /// Identificador del adaptador a utilizar cuando se utiliza el metodo ServiceCaller.AsyncExecute
        /// </summary>
        public string AdapterId
        {
            get
            {
                return _adapterId;
            }
            set
            {
                _adapterId = value;
            }
        }
        
        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private string _serviceName;

        /// <summary>
        /// Nombre del servicio
        /// </summary>
        public string ServiceName
        {
            get
            {
                return _serviceName;
            }
            set
            {
                _serviceName = value;
            }
        }

        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private string _operationName;

        /// <summary>
        /// Nombre de la operacion a ejecutar
        /// </summary>
        public string OperationName
        {
            get
            {
                return _operationName;
            }
            set
            {
                _operationName = value;
            }
        }

        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private ContextDictionary _context;

        /// <summary>
        /// Contexto donde las aplicaciones pueden guadar informacion fuera de banda para que las aplicaciones la transmitan
        /// </summary>
        [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly" )]
        public ContextDictionary Context
        {
            get
            {
                return _context;
            }
            set
            {
                _context = value;
            }
        }
        
        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private object[] _parameters;

        /// <summary>
        /// </summary>
        [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays" )]
        public object[] Parameters
        {
            get
            {
                return _parameters;
            }
            set
            {
                _parameters = value;
            }
        }

        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private object _result;

        /// <summary>
        /// Resultado de la ejecucion de la operacion
        /// </summary>
        public object Result
        {
            get
            {
                return _result;
            }
            set
            {
                _result = value;
            }
        }

        /// <summary>
        /// Variable privada para el manejo de la propiedad
        /// </summary>
        private Exception _invocationException;

        /// <summary>
        /// Excepcion que se produjo durante la ejecucion de la operacion (si se hubiera producido)
        /// </summary>
        public Exception InvocationException
        {
            get
            {
                return _invocationException;
            }
            set
            {
                _invocationException = value;
            }
        }

	    #endregion    
    }
}